package main

import (
	"context"
	"fmt"
	"log"
	"net/http"
	"os"
	"os/signal"
	"sync"
	"syscall"
	"time"
	"xiaozhi/config"
	"xiaozhi/socket"
)

var wg sync.WaitGroup
var lock sync.Mutex

func main() {
	//fmt.Println("asr start")
	//pcm, err := os.Open("demo/test.wav")
	//if err != nil {
	//	log.Default().Fatalln(err)
	//}
	//defer func(pcm *os.File) {
	//	err := pcm.Close()
	//	if err != nil {
	//		fmt.Println(err)
	//	}
	//}(pcm)
	//
	//asr := Asr.Asr{}
	//asr.Init()
	//buffers := nls.LoadPcmInChunk(pcm, 320)
	//data := *buffers
	//
	//// 合并 []*nls.Chunk 中的 Data 字段
	//var mergedData []byte
	//for _, chunk := range data.Data {
	//	if chunk != nil {
	//		mergedData = append(mergedData, chunk.Data...)
	//	}
	//}
	//go asr.OnMessage(mergedData, 1)
	//for result := range asr.Result {
	//	asr.Text = result
	//}
	//llm := LLM.LLM{}
	//fmt.Println(asr.Text)
	//err = llm.OnMessage(asr.Text, config.NewSysConfig().SystemPrompt, nil)
	//if err != nil {
	//	return
	//}
	//fmt.Println(llm.Text)
	//tts := TTS.TTS{}
	//tts.OnMessage(llm.Text)
	//fmt.Println(tts.Audio)

	// 获取配置中的端口号（int 类型）
	port := config.SocketConfig().Port
	if port <= 0 {
		log.Fatal("Invalid port number")
	}

	// 将端口号转换为字符串
	portStr := fmt.Sprintf(":%d", port)

	// 设置 HTTP 路由
	http.HandleFunc(config.SocketConfig().Api, socket.HandleConnections)

	// 创建 HTTP 服务器
	server := &http.Server{
		Addr:    portStr,
		Handler: nil, // 使用默认的多路复用器
	}

	// 启动服务器
	fmt.Printf("Server starting on port %d\n", port)
	go func() {
		if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
			log.Fatalf("HTTP server ListenAndServe error: %v", err)
		}
	}()

	// 等待终止信号
	quit := make(chan os.Signal, 1)
	signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
	<-quit

	// 优雅关闭服务器
	fmt.Println("Shutting down server...")
	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
	defer cancel()
	if err := server.Shutdown(ctx); err != nil {
		log.Fatalf("HTTP server Shutdown error: %v", err)
	}
	fmt.Println("Server exited properly")
}
